沼津高専 電子制御工学科 | ||||||
|
||||||
改訂記録 | ||||||
---|---|---|---|---|---|---|
版数 | 作成日 | 作成者 | 承認 | 改訂内容 | ||
A01 | 2000.10.13 | 田口 | 大庭 |
初版 | ||
A02 | 2000.10.19 | 田口 | 大庭 |
LCDドライバプログラムを扱う上での注意を追加 | ||
A03 | 2000.12.7 | 田口 | 田口 |
ioctl関数のコマンドを追加、試験方法の修正 | ||
A04 | 2001.1.6 | 田口 | 田口 | 2行の文字表示方法、ダウンロードファイルの追加、試験方法の更新等 | ||
A05 | 2001.3.13 | 田口 | 遠山 | 最終的な仕様に修正 |
●int fd=open("/dev/lcd$i",f_mode) 第1引数:LCDデバイスドライバを指定($iは0,1などの整数である。) 第2引数:ファイルの読み書きの属性(O_RDONLY、O_WRONLY、O_RDWR、etc) ・LCDデバイスファイルをopenすると、open時にI/Oポートアドレスのチェックと登録を行う。もしI/Oポートが使用中な らerrを返す。 ・初めてopenされたときは、LCDモジュールに最低限の初期設定(LCDモジュールのディスプレイ・カーソルON、2行表示に 設定、表示クリア)を行う。 ●read(fd, char *buf,size_t count,loff_t offset) 第1引数:LCDドライバファイルを指定 第2引数:表示文字の格納領域 第3引数:読み込み文字のバイト数 第4引数:オフセット ・readメソッドは呼び出されると、LCDモジュールに表示されている文字データを第3引数で指定されたバイト数分I/Oポ ートから読み込み、bufに格納する。カーソルがあったアドレスより前の文字データしか格納されていない事に注 意が必要。また、2行にわたって表示している場合は、表示設定を行わない限り(例えばアドレスを1行目の最後 の文字の所にするとか)2行目の文字のみデータは格納されている。 [例]10バイト分読み込みたい→現在LCDに表示されている文字は1行目に5文字、2行目に3文字、カーソルは2行目に表示 されている文字の後→ 結果:2行目の3文字分のデータしか格納されていないので、10バイト分指定したにもかかわらず3バイト分だけ読み 込む。 ・もしデータが獲得できなかった場合は-ENOMSGを返す。 ●write(fd, char *buf,int count,offset) 第1引数:LCDドライバファイルを指定 第2引数:表示文字の格納領域 第3引数:書込み文字のバイト数 第4引数:オフセット ・write関数は呼び出されると、bufに格納した文字データをデバイスに書き出す。そしてI/Oポートアドレスに文字デー タを書き込んで表示する。表示文字を書き込む前に表示設定(ioctl関数にて)を行わない限り、書き込んだ文字は、現 在表示されている文字の後に表示される。 ・もし第3引数が0(もしくは0以下)場合は-EINVALを返す。また、最大書き込み文字(32字)以上書き込むと-EMSGSIZEを返 す。 ・2行分の文字を1度に書き込む方法に関しては下記(5-3)参照。 ●ioctl(fd,int cmd,int &ctl_nr) 第1引数:LCDドライバファイルを指定 第2引数:コマンド選択値 第3引数:表示設定値 ・ioctl関数では第2引数の値によってコマンドを選択し、LCDデバイスの様々な表示設定を行う。コマンドは9つあり、選 択したコマンドによって表示設定信号を作成してI/Oポートに書き込むことにより、LCDの表示クリアやカーソルの進む 方向などを設定できる。 ●close(fd) 第1引数:LCDドライバファイルを指定 ・引数にLCDドライバファイルを指定すると、release関数はI/Oポートを開放してcloseする。
コマンド(cmd) |
コマンド値 |
設定内容 |
表示設定値(ctl_nr) |
LCD_CLEAR |
40 |
表示クリア |
なし |
LCD_ADD_ZERO |
41 |
表示アドレスを0番地にセット(表示内容不変化) |
なし |
LCD_CURSOR_SHIFT |
42 |
@カーソル進行方向 A表示シフト |
@インクリメント:1,デクリメント:0 AYES:1,NO:0 |
LCD_ON_OFF |
43 |
@全表示のON/OFF AカーソルのON/OFF B文字のブリンク |
@ON:1,OFF:0 AON:1,OFF:0 BYES:1,NO:0 (@*0x04 + A*0x02 + B) |
LCD_LIST_OR_CURSOR |
44 |
@表示シフトorカーソル移動(表示内容不変化) Aシフト方向 |
@表示シフト:1,カーソル移動:0 A右:1,左:0 |
LCD_TWO_SET |
45 |
表示アドレスを2行目0番地にセット |
なし |
LCD_ADD_SET |
46 |
表示文字のアドレスセット |
表示文字アドレス値 |
LCD_BF_ADD |
47 |
@ビジーフラグの読み出し A表示文字アドレスの読み出し |
@内部動作中:1,命令受付可:0 A表示文字アドレス値 |
LCD_HARDRESET |
48 |
利用度数のリセット |
なし |
#define LCD_IOC_MAGIC 'l' #define LCD_CLEAR _IO(LCD_IOC_MAGIC,40) #define LCD_ADD_ZERO _IO(LCD_IOC_MAGIC,41) #define LCD_CURSOR_SHIFT _IOW(LCD_IOC_MAGIC,42,&ctl_nr) #define LCD_ON_OFF _IOW(LCD_IOC_MAGIC,43,&ctl_nr) #define LCD_LIST_OR_CURSOR _IOW(LCD_IOC_MAGIC,44,&ctl_nr) #define LCD_TWO_SET _IO(LCD_IOC_MAGIC,45) #define LCD_ADD_SET _IOW(LCD_IOC_MAGIC,46,&ctl_nr) #define LCD_BF_ADD _IOR(LCD_IOC_MAGIC,47,&ctl_nr) #define LCD_HRADRESET _IO(LCD_IOC_MAGIC,48) #definr LCD_IOC_MAXNR 48
関連文書 |
---|